ACH Returns
This API allows clients to initiate an ACH Credit Return operation for a previously credited transaction. It also returns the status of the return request, along with updated account details and a unique process ID for tracking.
Method: POST
{{URL}}/rpc/paymentv2
Example
Request Parameters
| Parameter | Description |
|---|---|
| method | String RPC method name (e.g., ledger.ach.return) |
| id | String Unique ID for the request |
| payload | Object |
| reference | String Unique reference ID of the return request |
| transactionType | String Must be "ACH_IN_CREDIT_RETURN" |
| transactionDateTime | String Date and time of return request (format: YYYY-MM-DD HH:MM:SS) |
| channel | String Must be "ACH" |
| originalTransactionNumber | String Transaction number of the original incoming ACH credit |
| returnCode | String Return Code (e.g., R01) |
| reason | String Reason for the return |
| api | Object |
| credential | String Basic (space) [( "<Username>:<apiKey>") as Base64 encoded value] to be provided Sample Value: "Basic bmF2eWEubitlbXBAbmV0eGQuY29tOmY1OWIwY2NlOTU4ZTQ1YTc4MGVhZWIzYWVjOWVjZDAx" |
| signature | String Sign the request payload (params.payload) using private key. Sample Value: "MEQCIAbpxHpdOyBEVlmxPYv7m4Z1OvWJJYw7g7u3GE3T9nmvAiBjKHckSvb1M6O4t7FeWsn2z9Y3dMeYn3HyX/k28ek/Dw==" |
| apiKey | String API key is provided at the time of device registration. Sample Value : "f59b0cce958e45a780eaeb3aec9ecd01" |
Body
'{
"method": "ledger.ach.return",
"id": "1",
"params": {
"payload": {
"reference": "PL-TS-INR-000036",
"transactionType": "ACH_IN_CREDIT_RETURN",
"transactionDateTime": "2025-03-17 14:01:00",
"channel": "ACH",
"originalTransactionNumber": "QA00000001335030",
"returnCode": "R01",
"reason": "Insufficient Funds"
},
"api": {
"credential": "{{Cred}}",
"signature": "{{signature}}",
"apiKey": "{{API}}"
}
}
}'
Response: 200
Response Parameters
| Parameter | Description |
|---|---|
| api | Object |
| type | String Acknowledgement type (e.g., ACH_IN_CREDIT_RETURN_ACK) |
| reference | String Reference number generated for the return transaction |
| dateTime | String Timestamp of the response |
| account | Object |
| accountId | String Account identifier associated with the transaction |
| balanceCents | Integer Account balance in cents |
| holdBalanceCents | Integer Amount on hold in cents |
| status | String Status of the account (e.g., ACTIVE) |
| transactionNumber | String Unique number assigned to the return transaction |
| transactionStatus | String Current status (e.g., PENDING, COMPLETED, FAILED) |
| transactionAmountCents | Integer Amount returned in cents |
| originalRequestBase64 | String Base64-encoded version of the original return request |
| processId | String Internal process ID for traceability |
| header | Object |
| reference | String Transaction reference |
| apiKey | String Echoed API Key |
| signature | String Echoed Signature |
{
"id": "1",
"result": {
"api": {
"type": "ACH_IN_CREDIT_RETURN_ACK",
"reference": "PL-TS-INR-000036",
"dateTime": "2025-03-17 14:02:23"
},
"account": {
"accountId": "200133255370754",
"balanceCents": 2006127468,
"holdBalanceCents": 45140,
"status": "ACTIVE"
},
"transactionNumber": "QA00000001335033",
"transactionStatus": "PENDING",
"transactionAmountCents": 5500,
"originalRequestBase64": "base64-encoded-original-payload",
"processId": "PL25031701310017"
},
"header": {
"reference": "PL-TS-INR-000036",
"apiKey": "f54873cb58a6445c9e6825e75450f879",
"signature": "MEYCIQDybl...dk3Ia"
}
}
ACH Return Codes
ACH Return Codes
| Code | Description |
|---|---|
| R01 | Insufficient Funds |
| R02 | Account Closed |
| R03 | No Account / Unable to Locate Account |
| R04 | Invalid Account Number Structure |
| R05 | Unauthorized Debit to Consumer Account Using Corporate SEC Code |
| R06 | Returned per ODFI's Request |
| R07 | Authorization Revoked by Customer |
| R08 | Payment Stopped |
| R09 | Uncollected Funds |
| R10 | Customer Advises Not Authorized |
| R11 | Customer Advises Entry Not in Accordance with the Terms of the Authorization |
| R12 | Account Sold to Another DFI |
| R13 | Invalid ACH Routing Number |
| R14 | Representative Payee Deceased |
| R15 | Beneficiary or Account Holder Deceased |
| R16 | Account Frozen |
| R17 | File Record Edit Criteria / Entry with Invalid Account Number Initiated Under Questionable Circumstances |
| R18 | Improper Effective Entry Date |
| R19 | Amount Field Error |
| R20 | Non-Transaction Account |
| R21 | Invalid Company Identification |
| R22 | Invalid Individual ID Number |
| R23 | Credit Entry Refused by Receiver |
| R24 | Duplicate Entry |
| R25 | Addenda Error |
| R26 | Mandatory Field Error |
| R27 | Trace Number Error |
| R28 | Routing Number Check Digit Error |
| R29 | Corporate Customer Advises Not Authorized |
| R30 | RDFI Not Participant in Check Truncation Program |
| R31 | Permissible Return Entry (CCD and CTX only) |
| R32 | RDFI Non-Settlement |
| R33 | Return of XCK Entry |
| R34 | Limited Participation DFI |
| R35 | Return of Improper Debit Entry |
| R36 | Return of Improper Credit Entry |
| R37 | Source Document Presented for Payment |
| R38 | Stop Payment on Source Document |
| R39 | Improper Source Document / Amount Not Accurately Obtained from Source Document |
| R40 | Return of ENR Entry by Federal Government Agency |
| R41 | Invalid Transaction Code |
| R42 | Routing Number / Check Digit Error |
| R43 | Invalid DFI Account Number |
| R44 | Invalid Individual ID Number |
| R45 | Invalid Individual / Company Name |
| R46 | Invalid Representative Payee Indicator Code |
| R47 | Duplicate Enrollment |
| R50 | State Law Affecting RCK Acceptance |
| R51 | Item Related to RCK Entry is Ineligible or Improper |
| R52 | Stop Payment on Item Related to RCK Entry |
| R53 | Item and RCK Entry Presented for Payment |
| R61 | Misrouted Return |
| R62 | Return of Erroneous or Reversing Debit |
| R67 | Duplicate Return |
| R68 | Untimely Return |
| R69 | Field Error |
| R70 | Permissible Return Not Accepted / Not Requested by ODFI |
| R71 | Misrouted Dishonored Return |
| R72 | Untimely Dishonored Return |
Error Codes
Error Codes
| Error Code | Error Message |
|---|---|
| A107 | DUPLICATE_REFERENCE |
| A112 | INVALID_AMOUNT |
| A113 | INVALID_CHANNEL |
| A114 | CUSTOMER_NOT_FOUND |
| A116 | INVALID_API_KEY |
| A118 | TRANSACTION_REFERENCE_EMPTY |
| A122 | PROGRAM NOT FOUND |
| A123 | CREDITOR_ACCOUNT_TYPE_EMPTY |
| A126 | TRANSACTION_TYPE_EMPTY |
| A147 | TRANSACTION NOT FOUND |
| A157 | INVALID ACCOUNT NUMBER |
| A161 | DEBTOR ACCOUNT NOT FOUND |
| A166 | DEBTOR_ACCOUNT_TYPE_EMPTY |
| A167 | DEBTOR_ACCOUNT_ID_EMPTY |
| A169 | ACCOUNT NUMBER DOES NOT MATCH WITH API KEY |
| A172 | IDENTIFICATIONTYPE2 SHOULD BE EITHER SAVINGS OR CHECKING |
| A183 | PAYLOAD EMPTY |
| A184 | INVALID ORIGINAL TRANSACTION STATUS |
| A185 | TRANSACTION ALREADY REVERSED |
| A186 | CREDITOR FIRSTNAME REQUIRED |
| A187 | CREDITOR POSTAL ADDRESS ADDRESSLINE1 REQUIRED |
| A188 | CREDITOR POSTAL ADDRESS ZIPCODE REQUIRED |
| A189 | CREDITOR POSTAL ADDRESS COUNTRYCODE REQUIRED |
| A190 | CREDITOR CONTACT EITHER PRIMARYEMAIL OR PRIMARYPHONE REQUIRED |
| A191 | DEBTOR FIRSTNAME REQUIRED |
| A192 | DEBTOR POSTAL ADDRESS ADDRESSLINE1 REQUIRED |
| A193 | DEBTOR POSTAL ADDRESS ZIPCODE REQUIRED |
| A194 | DEBTOR POSTAL ADDRESS COUNTRYCODE REQUIRED |
| A195 | DEBTOR CONTACT EITHER PRIMARYEMAIL OR PRIMARYPHONE REQUIRED |
| A196 | DEBTOR USERTYPE REQUIRED |
| A197 | DEBTOR IDENTIFICATION REQUIRED |
| A198 | DEBTOR IDENTIFICATIONTYPE REQUIRED |
| A199 | CREDITOR USERTYPE REQUIRED |
| A200 | CREDITOR IDENTIFICATION REQUIRED |
| A201 | CREDITOR IDENTIFICATIONTYPE REQUIRED |
| A205 | INVALID_PROGRAM |
| A206 | INVALID_PRODUCT |
| A207 | PRODUCT_PROGRAM_CHANNEL SETTING NOT FOUND |
| A208 | ID EMPTY |
| A209 | APIKEY NOT FOUND |
| 1111 | CREDITOR ACCOUNT NOT FOUND |
| 1113 | CREDITOR NOT FOUND |
| 1116 | TRANSACTION AMOUNT NOT FOUND |
| 1117 | TRANSACTION CURRENCY NOT FOUND |
| 1122 | CREDITOR ACCOUNT IDENTIFICATION TYPE NOT FOUND |
| 1123 | CREDITOR ACCOUNT IDENTIFICATION TYPE2 NOT FOUND |
| 1126 | DEBTOR ACCOUNT IDENTIFICATION TYPE NOT FOUND |
| 1127 | PRODUCT NOT FOUND |
| 1128 | PROGRAM NOT FOUND |
| 1129 | CHANNEL NOT FOUND |
| 1130 | TRANSACTION TYPE NOT FOUND |
| 1131 | INVALID API KEY |
| 2053 | INVALID_ACCOUNT_NUMBER |
| 5019 | INSUFFICIENT BALANCE |
| 9999 | INTERNAL ERROR |
| 1001 | CARD HOLDER ALREADY EXISTS |
| 1002 | INVALID CARDHOLDER FIRST NAME |
| 1003 | INVALID CARDHOLDER PHONE NUMBER |
| 1004 | INVALID CARDHOLDER ADDRESS LINE 1 |
| 1005 | INVALID CARDHOLDER CITY |
| 1006 | INVALID CARDHOLDER STATE |
| UNAUTHORIZED | Access Denied |
| INVALID_SIGNATURE | Invalid Signature |
| NOT_FOUND_USER_DEVICE | User device not found |
| BAD_CREDENTIAL | Invalid Credential |